package com.lbj.core.net

import com.lbj.core.app.CoreApp
import com.lbj.core.net.interceptor.CacheInterceptor
import com.lbj.mvvm.network.BaseNetworkApi
import com.lbj.mvvm.parent.cookiejar.PersistentCookieJar
import com.lbj.mvvm.parent.cookiejar.cache.SetCookieCache
import com.lbj.mvvm.parent.cookiejar.persistence.SharedPrefsCookiePersistor
import okhttp3.Cache
import okhttp3.OkHttpClient
import java.io.File

/**
 * 描述　: 自己项目中的网络请求构建器，继承BaseNetworkApi 并实现setHttpClientBuilder方法，
 * 在这里可以添加拦截器，可以对Builder做任意操作
 */
open class CoreNetApi : BaseNetworkApi() {

    /**
     * 实现重写父类的setHttpClientBuilder方法，
     * 在这里可以添加拦截器，可以对Builder做任意操作
     */
    override fun setHttpClientBuilder(builder: OkHttpClient.Builder): OkHttpClient.Builder {
        return builder.apply {
            //设置缓存配置
            cache(cache)
            //添加缓存拦截器
            addInterceptor(CacheInterceptor())
            //添加Cookies自动持久化
            cookieJar(cookieJar)
        }
    }

    //Cookies自动持久化 调用 clear 可清空Cookies
    private val cookieJar: PersistentCookieJar by lazy {
        PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(CoreApp.CONTEXT))
    }

    //缓存信息配置
    private val cache: Cache by lazy {
        //设置缓存路径
        val httpCacheDirectory = File(CoreApp.CONTEXT.cacheDir, "http_response")
        Cache(httpCacheDirectory, 10 * 1024 * 1024)
    }
}